import { request } from '@/common/js/request'
export default {
  state: {
    openExamine: false, //是否开启审核状态
    token: '',
    userInfo: {},
    timerIdent: false, //全局1s定时器，只在全局开启一个，所有需要定时执行的任务监听该值即可，无需额外开启
    cartCount: 0, //购物车数量
    orderCount: {}, //订单数量
    couponCount: 0, //可用优惠券数量
  },
  mutations: {
    //更新state数据
    setStateAttr(state, param) {
      if (param instanceof Array) {
        for (let item of param) {
          state[item.key] = item.val
        }
      } else {
        state[param.key] = param.val
      }
    },
    //更新token
    setToken(state, data) {
      const { token, tokenExpired } = data
      state.token = token
      uni.setStorageSync('uniIdToken', token)
      uni.setStorageSync('tokenExpired', tokenExpired)
      this.dispatch('getUserInfo') //更新用户信息
      this.dispatch('getCartCount') //更新购物车数量
      uni.$emit('refreshCart') //刷新购物车
      this.dispatch('getOrderCount') //更新订单数量
    },
    //退出登录
    logout(state) {
      state.token = ''
      uni.removeStorageSync('uniIdToken')
      this.dispatch('getCartCount') //更新购物车数量
      uni.$emit('refreshCart') //刷新购物车
      this.dispatch('getOrderCount') //更新订单数量
      setTimeout(() => {
        state.userInfo = {}
      }, 1100)
    },
  },
  actions: {
    //更新用户信息
    async getUserInfo({ state, commit }) {
      const res = await request(
        'user',
        'get',
        {},
        {
          checkAuthInvalid: false,
        }
      )
      if (res.status === 1) {
        const userInfo = res.data
        commit('setStateAttr', {
          key: 'userInfo',
          val: userInfo,
        })
      }
    },
    //更新购物车数量
    async getCartCount({ state, commit }) {
      let count = 0
      if (state.token) {
        try {
          const res = await request('cart', 'count')
          count = res.total || 0
        } catch (err) {
          console.error('更新购物车数量 => ', err)
        }
      }
      commit('setStateAttr', {
        key: 'cartCount',
        val: count,
      })
    },
    //更新用户订单数量
    async getOrderCount({ state, commit }) {
      let data = {
        c0: 0,
        c1: 0,
        c2: 0,
        c3: 0,
      }
      if (state.token) {
        try {
          const res = await request('order', 'getOrderCount')
          data = res
        } catch (err) {
          console.error('更新用户订单数量 => ', err)
        }
      }
      commit('setStateAttr', {
        key: 'orderCount',
        val: data,
      })
    },
    //更新用户优惠券数量
    async getCouponCount({ state, commit }) {
      let count = 0
      if (state.token) {
        try {
          const res = await request('coupon', 'getUserCouponCount')
          count = res.total
          console.log(res)
        } catch (err) {
          console.error('更新用户优惠券数量 => ', err)
        }
      }
      commit('setStateAttr', {
        key: 'couponCount',
        val: count,
      })
    },
  },
}
